3.3. variant와 visit
std::variant클래스와 std::visit함수를 사용하면 if, else문을 줄이고 코드를 작성할 수 있다.
variant 클래스 | Microsoft Learn
variant는 기본적으로 C++ 표준 라이브러리로, 안전한 union 객체를 사용할 수 있게 해준다.
내부적으로 union과 어떤 타입을 가지고 있는지를 index로서 저장하며, 값을 get할때 index로 빠르게 접근하여 내어준다.
using FPropertyValue = std::variant<
bool,
int,
float,
XMFLOAT3,
std::string,
std::vector<std::string>
>;
std::visit함수는 이 std::variant클래스를 활용하여 함수를 실행시킬 수 있는 함수다.
첫번째 인자로 함수를 받고, 두번째 인자로 std::variant 객체를 받는다. 함수는 아래와 같이 작성하면 타입에 맞게 사용할 수 있다.
std::visit([&](auto&& Arg)
{
using T = std::decay_t<decltype(Arg)>;
Value = MakeShared<T>(Arg);
}, v.Value
);
아래와 같은 Overloaded 패턴을 섞어서 사용할 수 있으니 필요해지면 다시 공부해 보도록 한다.
